package br.uniceub.fsw.academicmobile.dao;

import br.uniceub.fsw.academicmobile.vo.AlunoVO;
import br.uniceub.fsw.academicmobile.vo.DisciplinaVO;
import br.uniceub.fsw.academicmobile.vo.HistoricoVO;
import br.uniceub.fsw.academicmobile.vo.TurmaVO;
import java.sql.ResultSet;
import java.util.ArrayList;

/**
 * Dao responsável pelas operaçoes de banco associadas ao objeto Historico
 * @author Christian Moryah
 */
public class HistoricoDAO {

    public BD bd;

    public HistoricoDAO(){
        bd = new BD();
    }
    
    /**
     * Retorna um objeto historico a partir de seu id
     * @param historico vo carregando o id do historico
     * @return objeto HistoricoVO
     */
    public HistoricoVO consultarHistoricoPorId(HistoricoVO historico){
        String SQL = "SELECT * FROM tb_historico WHERE ID_historico = <01>";
        SQL = SQL.replaceAll("<01>", historico.getIdHistorico().toString());
        HistoricoVO retorno = new HistoricoVO();
        try{
            ResultSet rs = bd.getResultSet(SQL);
            if(rs.next()){
                retorno.setIdHistorico(rs.getInt("ID_historico"));
                retorno.setTbTurmaIdTurma(rs.getInt("tb_turma_ID_turma"));
                retorno.setTbDisciplinaIdCdDisciplina(rs.getInt("tb_disciplina_ID_CD_disciplina"));
                retorno.setTbAlunoIdCdRa(rs.getLong("tb_aluno_ID_CD_ra"));
                retorno.setQtFrequencia(rs.getInt("QT_frequencia"));
                retorno.setSgMencao(rs.getString("SG_mencao"));
            }
        } catch (Exception ex){
            System.err.println("HistoricoDAO.consultarHistoricoPorId: " +
                    ex.getMessage());
        }
        return retorno;
    }
    
    /**
     * Retorna um objeto Historico a partir da turma e do aluno
     * @param turma vo carregando id da turma
     * @param aluno vo carregando o ra do aluno
     * @return objeto HistoricoVO
     */
    public HistoricoVO consultarHistoricoPorTurmaAluno(TurmaVO turma, AlunoVO aluno){
        String SQL = "SELECT * FROM tb_historico WHERE tb_turma_ID_turma = <01> " +
                "AND tb_aluno_ID_CD_ra = <02>";
        SQL = SQL.replaceAll("<01>", turma.getIdTurma().toString());
        SQL = SQL.replaceAll("<02>", aluno.getIdCdRa().toString());
        HistoricoVO retorno = new HistoricoVO();
        try{
            ResultSet rs = bd.getResultSet(SQL);
            if(rs.next()){
                retorno.setIdHistorico(rs.getInt("ID_historico"));
                retorno.setTbTurmaIdTurma(rs.getInt("tb_turma_ID_turma"));
                retorno.setTbDisciplinaIdCdDisciplina(rs.getInt("tb_disciplina_ID_CD_disciplina"));
                retorno.setTbAlunoIdCdRa(rs.getLong("tb_aluno_ID_CD_ra"));
                retorno.setQtFrequencia(rs.getInt("QT_frequencia"));
                retorno.setSgMencao(rs.getString("SG_mencao"));
            }
        } catch (Exception ex){
            System.err.println("HistoricoDAO.consultarHistoricoPorTurmaAluno: " +
                    ex.getMessage());
        }
        return retorno;
    }
    
    /**
     * Altera o objeto historico no banco
     * @param historico vo carregando os dados do historico
     * @return boolean true caso haja sucesso
     */
    public boolean alterarHistorico(HistoricoVO historico){
        String SQL = "UPDATE tb_historico SET SG_mencao='<01>', QT_frequencia = <02>" +
                     " WHERE ID_historico=<03>";
        SQL = SQL.replaceAll("<01>", historico.getSgMencao());
        SQL = SQL.replaceAll("<02>", historico.getQtFrequencia().toString());
        SQL = SQL.replaceAll("<03>", historico.getIdHistorico().toString());
        return bd.execSQL(SQL);
    }
    
    /**
     * Retorna o objeto historico a partir da disciplina
     * @param dVO vo carregando o id da disciplina
     * @return ArrayList conjunto de historicos associados a disciplina
     * @throws java.lang.Exception
     */
    public ArrayList<HistoricoVO> getHistoricoForDisciplina(DisciplinaVO dVO)throws Exception{
		String SQL="select * from tb_historico where tb_disciplina_ID_CD_disciplina="+dVO.getIdCdDisciplina();
		ResultSet rs = bd.getResultSet(SQL);
		ArrayList listaHistorico= new ArrayList<HistoricoVO>();
                if(rs == null){
                    
                } else {
                    while(rs.next()){
                            HistoricoVO hVO=new HistoricoVO();
                            hVO.setTbAlunoIdCdRa(rs.getLong("tb_aluno_ID_CD_ra"));
                            hVO.setTbTurmaIdTurma(rs.getInt("tb_turma_ID_turma"));
                            hVO.getAluno();
                            hVO.getTurma();
                            hVO.setDisciplina(dVO);
                            hVO.setQtFrequencia(rs.getInt("QT_frequencia"));
                            hVO.setSgMencao(rs.getString("SG_mencao"));
                            hVO.setIdHistorico(rs.getInt("ID_historico"));
                            listaHistorico.add(hVO);

                    }
                }
		bd.finalize();
		return listaHistorico;
	}
    
}
